package easyjava.function;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

/**
 * 类型转换相关方法
 *
 */
public interface CastFunction {

	/**
	 * 接收类型只能是obj的实际类型。如果为普通对象，父类型或包装类型可以正常接收，
	 * 需要指出的是数据类型必须为准确的实际类型，否则会抛出异常。(如：Object[] 不能接收String[])
	 */
	static <T> T cast(Object obj) {
		return (T)obj;
    }
	
	/**
	 * 当obj不是数组类型时与cast方法相同，object为数组类型时，无论obj的实际类型是什么，
	 * 返回类型始终为Object[]，需要用Object[]接收，否则会抛出异常。
	 */
	static <T> T castToObject(Object obj) {
		Class clazz = obj.getClass();
		if(clazz.isArray()) {
			int len = Array.getLength(obj);
			List<Object> newList=new ArrayList<>();
			for(int i=0;i<len;i++) {
				newList.add(Array.get(obj, i));
			}
			return (T) newList.toArray();
		}else {
			return (T)obj;
		}
	}
}
